package models

import (
	_ "time"

	orm "go-papers/database"
	"go-papers/tools"
)

type OrderCallback struct {
	Id                 int    `json:"id" gorm:"type:int(11) unsigned;primary_key"` //
	TransactionId      string `json:"transactionId" gorm:"type:varchar(255);"`     // 微信支付订单号
	OutTradeNo         string `json:"outTradeNo" gorm:"type:varchar(255);"`        // 商户系统内部订单号
	TimeEnd            string `json:"timeEnd" gorm:"type:varchar(16);"`            // 支付完成时间
	Appid              string `json:"appid" gorm:"type:varchar(255);"`             // 服务商的APPID
	MchId              string `json:"mchId" gorm:"type:varchar(255);"`             // 商户号
	SubAppid           string `json:"subAppid" gorm:"type:varchar(255);"`          // 小程序的APPID
	SubMchId           string `json:"subMchId" gorm:"type:varchar(255);"`          // 子商户号
	DeviceInfo         string `json:"deviceInfo" gorm:"type:varchar(255);"`        //
	NonceStr           string `json:"nonceStr" gorm:"type:varchar(255);"`          //
	SignType           string `json:"signType" gorm:"type:varchar(255);"`          //
	Sign               string `json:"sign" gorm:"type:varchar(255);"`              //
	ResultCode         string `json:"resultCode" gorm:"type:varchar(255);"`        // 业务结果
	ErrCode            string `json:"errCode" gorm:"type:varchar(255);"`           // 错误代码
	ErrCodeDes         string `json:"errCodeDes" gorm:"type:varchar(255);"`        // 错误代码描述
	Openid             string `json:"openid" gorm:"type:varchar(255);"`            //
	IsSubscribe        string `json:"isSubscribe" gorm:"type:varchar(1);"`         // 是否关注公众账号
	SubOpenid          string `json:"subOpenid" gorm:"type:varchar(255);"`         // 用户子标识
	TradeType          string `json:"tradeType" gorm:"type:varchar(255);"`         // 	JSAPI、NATIVE、APP
	BankType           string `json:"bankType" gorm:"type:varchar(255);"`          // 银行类型
	TotalFee           int    `json:"totalFee" gorm:"type:int(11);"`               // 订单总金额，单位为分
	CashFee            string `json:"cashFee" gorm:"type:varchar(255);"`           // 现金支付金额订单现金支付金额
	FeeType            string `json:"feeType" gorm:"type:varchar(255);"`           // 货币类型
	CashFeeType        string `json:"cashFeeType" gorm:"type:varchar(255);"`       // 默认人民币：CNY
	SettlementTotalFee int    `json:"settlementTotalFee" gorm:"type:int(11);"`     // 应结订单金额=订单金额-非充值代金券金额，应结订单金额<=订单金额。
	CouponFee          int    `json:"couponFee" gorm:"type:int(11);"`              // 代金券金额
	CouponCount        int    `json:"couponCount" gorm:"type:int(11);"`            // 代金券使用数量
	DataScope          string `json:"dataScope" gorm:"-"`
	Params             string `json:"params"  gorm:"-"`
	BaseModel
}

func (OrderCallback) TableName() string {
	return "order_callback"
}

// 创建OrderCallback
func (e *OrderCallback) Create() (OrderCallback, error) {
	var doc OrderCallback
	result := orm.Eloquent.Table(e.TableName()).Create(&e)
	if result.Error != nil {
		err := result.Error
		return doc, err
	}
	doc = *e
	return doc, nil
}

// 获取OrderCallback
func (e *OrderCallback) Get() (OrderCallback, error) {
	var doc OrderCallback
	table := orm.Eloquent.Table(e.TableName())

	if err := table.First(&doc).Error; err != nil {
		return doc, err
	}
	return doc, nil
}

// 获取OrderCallback带分页
func (e *OrderCallback) GetPage(pageSize int, pageIndex int) ([]OrderCallback, int, error) {
	var doc []OrderCallback

	table := orm.Eloquent.Select("*").Table(e.TableName())

	// 数据权限控制(如果不需要数据权限请将此处去掉)
	dataPermission := new(DataPermission)
	dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
	table, err := dataPermission.GetDataScope(e.TableName(), table)
	if err != nil {
		return nil, 0, err
	}
	var count int

	if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
		return nil, 0, err
	}
	table.Where("`deleted_at` IS NULL").Count(&count)
	return doc, count, nil
}

// 更新OrderCallback
func (e *OrderCallback) Update(id int) (update OrderCallback, err error) {
	if err = orm.Eloquent.Table(e.TableName()).Where("id = ?", id).First(&update).Error; err != nil {
		return
	}

	//参数1:是要修改的数据
	//参数2:是修改的数据
	if err = orm.Eloquent.Table(e.TableName()).Model(&update).Updates(&e).Error; err != nil {
		return
	}
	return
}

// 删除OrderCallback
func (e *OrderCallback) Delete(id int) (success bool, err error) {
	if err = orm.Eloquent.Table(e.TableName()).Where("id = ?", id).Delete(&OrderCallback{}).Error; err != nil {
		success = false
		return
	}
	success = true
	return
}

//批量删除
func (e *OrderCallback) BatchDelete(id []int) (Result bool, err error) {
	if err = orm.Eloquent.Table(e.TableName()).Where("id in (?)", id).Delete(&OrderCallback{}).Error; err != nil {
		return
	}
	Result = true
	return
}
